#ifndef __OS_EVENT_H
#define __OS_EVENT_H
#include "task.h"
#include "osLib.h"



/* 定义事件的枚举类型  */
typedef enum _EVENT_TYPE
{
    eventTypeUnkonw,                /* 未知类型*/
    eventTypeSem,                   /* 信号量*/
    eventTypeMsgBox,                /* 消息邮箱*/
    eventTypeMemBlock,              /* 存储块*/
    eventTypeFlagGroup,             /* 事件标志组*/
    eventTypeMutex,                 /* 互斥锁*/
} EVENT_TYPE_T;


/* 定义事件控制块*/
typedef struct _EVENT
{
    EVENT_TYPE_T        type;       /* 事件的类型*/
    LIST_T              waitList;   /* 任务等待列表*/    
}EVENT_T;


extern void     vEventInit(EVENT_T *event, EVENT_TYPE_T type);
extern void     vEventWait(EVENT_T *event, TASK_T *task, void *msg, uint32_t state, uint32_t timeout);
extern TASK_T*  vEventWakeUp(EVENT_T *event, void *msg, uint32_t result);
extern void     vEventWakeUpTask(EVENT_T *event, TASK_T *task, void *msg, uint32_t result);
extern void     vEventRemoveTask(TASK_T *task, void *msg, uint32_t result);
extern uint32_t vEventRemoveAll (EVENT_T *event, void *msg, uint32_t result);
extern uint32_t vEventWaitCount(EVENT_T *event);

#endif // __OS_EVENT_H
